package cn.tedu.charging.device.controller;

import cn.tedu.charging.common.pojo.JsonResult;
import cn.tedu.charging.common.pojo.param.UpdateGunStatusParam;
import cn.tedu.charging.common.pojo.vo.StationDetailVO;
import cn.tedu.charging.common.pojo.vo.StationInfoVO;
import cn.tedu.charging.device.pojo.vo.StationVO;
import cn.tedu.charging.device.service.DeviceService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@Slf4j
@RestController
@RequestMapping("/device")
public class DeviceController {
    @Autowired
    private DeviceService deviceService;

    /**
     * 查询附近的充电站
     *
     * @return 充电站列表
     * 入参 longitude 经度 latitude 纬度 distance 距离
     * 出参 充电站的列表 多个充电站
     */
    @GetMapping("/station/near")
    public JsonResult<List<StationInfoVO>> nearStation(Double longitude, Double latitude, @RequestParam("radius") Double distance) {
        log.debug("控制层-Controller 查询附近的充电站 经度:{},纬度:{},距离:{}", longitude, latitude, distance);
        //模拟我现在的位置， 方圆十公里内
        List<StationInfoVO> stationVOS =
                deviceService.nearStation(longitude, latitude, distance);
        // 封装结果
        JsonResult<List<StationInfoVO>> result = JsonResult.ok(stationVOS);
        log.debug("控制层-Controller 查询附近的充电站,结果:{}", result);
        // 响应结果
        //return JsonResult.ok(result); ERROR错误的代码
        return result;
    }

    @GetMapping("/station/detail/{stationId}")
    public JsonResult<StationDetailVO> detail(@PathVariable("stationId") Integer stationId) {
        log.debug("控制层-Controller 查询充电站详情,入参:{}", stationId);
        //记录时间
        Long startTime = System.currentTimeMillis();
        log.debug("查询充电站详细信息的开始时间:{}", startTime);
        StationDetailVO stationVO = deviceService.stationDetailById(stationId);
        //记录结束时间
        Long endTime = System.currentTimeMillis();
        //消耗的时间
        Long costTime = endTime - startTime;
        log.debug("查询充电站的详情,开始时间:{},结束时间:{},总耗时:{}", startTime, endTime, costTime);
        JsonResult<StationDetailVO> result = JsonResult.ok(stationVO);
        log.debug("控制层-Controller     充电站的详情,出参:{}", result);
        return result;

    }

    /**
     * 更新枪的状态
     *
     * @param updateGunStatusParam 枪的状态参数
     * @return 更新结果
     */
    @PostMapping("/gun/update/status")
    public JsonResult<Boolean> updateGunStatus(@RequestBody UpdateGunStatusParam updateGunStatusParam) {
        log.debug("控制层-Controller 更新枪的状态,入参:{}", updateGunStatusParam);
        Boolean result =deviceService.updateGunStatus(updateGunStatusParam);
        JsonResult ok = JsonResult.ok(result);
        log.debug("更新抢的状态,入参:{},出参:{}", updateGunStatusParam,ok);

        return ok;

    }

}
